﻿// Study1017.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 第十章 STL和泛型设计 算法 不变序列算法

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
int main()
{
    int iarray0[] = { 0,1,2,3,4,5,6,6,6,7,8 };
    vector<int> vec0(iarray0, iarray0 + sizeof(iarray0) / sizeof(int));
    int iarray1[] = { 6,6};
    vector<int> vec1(iarray1, iarray1 + sizeof(iarray1) / sizeof(int));
    int iarray2[] = { 5,6};
    vector<int> vec2(iarray2, iarray2 + sizeof(iarray2) / sizeof(int));
    int iarray3[] = {0,1,2,3,4,5,7,7,7,9,7 };
    vector<int> vec3(iarray3, iarray3 + sizeof(iarray3) / sizeof(int));

    cout << "vec0:";
    copy(vec0.begin(), vec0.end(), ostream_iterator<int>(cout, ","));
    cout << endl;
    cout << "vec3:";
    copy(vec3.begin(), vec3.end(), ostream_iterator<int>(cout, ","));
    cout << endl;

    //找出vec0中相邻元素相等的第一个元素 
    cout << "vec0中相邻元素相等的第一个元素:" << *adjacent_find(vec0.begin(), vec0.end()) << endl;

    //找出vec0中小于7的元素个数
    cout << "找出vec0中小于7的元素个数:" << count_if(vec0.begin(), vec0.end(), bind2nd(less<int>(), 7)) << endl;

    //找出vec0中大于2的第一个元素所在位置的元素
    cout <<"找出vec0中大于2的第一个元素所在位置的元素:" <<*find_if(vec0.begin(), vec0.end(), bind2nd(greater<int>(), 2))<<endl;

    //子序列vec2在vec0中出现的起点位置元素
    cout <<"子序列vec2在vec0中出现的起点位置元素:"<< *search(vec0.begin(), vec0.end(), vec2.begin(), vec2.end()) << endl;

    //查找连续出现3个6的起点位置元素
    cout << "查找连续出现3个6的起点位置元素:" << *search_n(vec0.begin(), vec0.end(), 3, 6, equal_to<int>()) << endl;

    //判断两个区间vec0和vec3是否相等（0为假，1为真）
    cout << "判断两个区间vec0和vec3是否相等（0为假，1为真）:" << equal(vec0.begin(), vec0.end(), vec3.begin(),vec3.end())<<endl;

    //查找区间vec3在vec0不匹配点的位置
    pair<vector<int>::iterator, vector<int>::iterator> result = mismatch(vec0.begin(), vec0.end(), vec3.begin());
    cout << "查找区间vec3在vec0不匹配点的位置:" << result.first - vec0.begin() << endl;

    return 0;

}


